// Tencent is pleased to support the open source community by making
// 蓝鲸智云 - 监控平台/日志平台 (BlueKing - Monitor/Log) available.
// Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
// Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://opensource.org/licenses/MIT
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
//

package ratelimiter

import (
	"github.com/mitchellh/mapstructure"

	"github.com/TencentBlueKing/bk-collector/define"
	"github.com/TencentBlueKing/bk-collector/processor"
)

const (
	ProcessorName string = "rate_limiter"
)

func init() {
	processor.Register(ProcessorName, NewFactory)
}

func NewFactory(conf map[string]interface{}, customized []processor.SubConfigProcessor) (processor.Processor, error) {
	var c Config
	if err := mapstructure.Decode(conf, &c); err != nil {
		return nil, err
	}
	return &rateLimiter{
		CommonProcessor: processor.NewCommonProcessor(conf, customized),
		config:          c,
	}, nil
}

type rateLimiter struct {
	processor.CommonProcessor
	config Config
}

func (rateLimiter) Name() string    { return ProcessorName }
func (rateLimiter) IsDerived() bool { return false }

// TODO(mando): 待实现
func (rateLimiter) Process(_ *define.Record) (*define.Record, error) { return nil, nil }
